1. Technical Field
Embodiments of the invention relate to storage server and server-based computer system employed to service streams of tasks received from multiple clients. Each task performs one or more operations with reference to data held by the server, including returning data to the requesting client and/or modifying the data. More specifically, the invention relates to assuring acceptable performance to all client machines invoking the services of the server.
2. Background
A control block is one of a collection of interchangeable resources within the computer system, one of which must be associated exclusively to a single task in order for that task to perform a given step or series of steps. In a distributed computer system that includes multiple clients submitting tasks to the server, an overload of tasks from one or more clients can block timely completion of tasks from other clients. Mitigation of availability of control blocks to support a task may result in degradation of high priority work, starvation, priority inversion, etc.
A control block is a single-tenancy resource, which means that it can be associated with only a single task at a time. A control block can itself be a resource that must be used to perform a given step or series of steps. A control block can also be a resource that enables a task to use a second resource, which might support multi-tenancy, meaning that the second resource can be used by more than one task at a time, provided that each such task is in possession of a control block for the purpose.
Allocation of control blocks among the multiple client machines may be done by allocating a large fixed number of control blocks or an adjustable number that can be expanded, defining classification rules for tasks and placing limits on the quantity of control blocks of a given type can be used in simultaneous tasks in each class, etc. However, the pool of available control blocks is limited by system constraints, and as such, the availability for expansion is limited. Similarly, by applying quotas to classes of control blocks, tasks are slowed down based upon the choice of quotas.
With an entry point rate control, each task is classified, and flow limits are applied to the tasks based on the size and number of I/O operations, a vector of flow attributes of the task, such as number of operations, number of bytes read, number of bytes written, etc., are computed before the task is processed. A token-bucket throttling discipline is applied that ensures each class cannot exceed a specified flow rate for that vector component. The task is held until sufficient credit has accumulated for all components to allow the task to be processed. Once passed, the task uses whatever resources it needs without flow limitation.